/**
 * 蓝牙连接状态枚举类
 * 
 * 定义蓝牙连接的各种状态，用于状态管理和UI更新。
 * 使用密封类（sealed class）确保状态的类型安全和完整性。
 * 
 * 使用方法：
 * - 在BluetoothManager中管理连接状态
 * - 在UI层监听状态变化并更新界面
 * - 通过StateFlow提供响应式状态更新
 * 
 * 原理：
 * - 密封类确保所有可能的状态都被处理
 * - 每个状态可以携带相关的数据信息
 * - 支持模式匹配和类型安全的状态处理
 */
package com.example.brain_wave.bluetooth

/**
 * 蓝牙连接状态密封类
 * 定义了蓝牙连接过程中的所有可能状态
 */
sealed class BluetoothConnectionState {
    
    /**
     * 未连接状态
     * 初始状态或连接断开后的状态
     */
    object Disconnected : BluetoothConnectionState()
    
    /**
     * 连接中状态
     * @param deviceName 正在连接的设备名称
     */
    data class Connecting(val deviceName: String) : BluetoothConnectionState()
    
    /**
     * 已连接状态
     * @param deviceName 已连接的设备名称
     * @param deviceAddress 设备的MAC地址
     */
    data class Connected(
        val deviceName: String,
        val deviceAddress: String
    ) : BluetoothConnectionState()
    
    /**
     * 连接失败状态
     * @param error 失败原因描述
     */
    data class Failed(val error: String) : BluetoothConnectionState()
    
    /**
     * 扫描中状态
     * 正在扫描蓝牙设备时的状态
     */
    object Scanning : BluetoothConnectionState()
    
    /**
     * 获取状态的可读描述
     */
    fun getDescription(): String {
        return when (this) {
            is Disconnected -> "未连接"
            is Connecting -> "正在连接到 $deviceName"
            is Connected -> "已连接到 $deviceName"
            is Failed -> "连接失败: $error"
            is Scanning -> "正在扫描设备"
        }
    }
    
    /**
     * 检查是否为连接状态
     */
    fun isConnected(): Boolean {
        return this is Connected
    }
    
    /**
     * 检查是否为活跃状态（连接中或已连接）
     */
    fun isActive(): Boolean {
        return this is Connecting || this is Connected
    }
}